home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / geodem / geom8.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1995-05-08  |  17.5 KB  |  448 lines

  1. VERSION 2.00
  2. Begin Form Geo 
  3.    BackColor       =   &H00C0C0C0&
  4.    BorderStyle     =   1  'Fixed Single
  5.    Caption         =   "Geometry"
  6.    ClientHeight    =   6885
  7.    ClientLeft      =   1080
  8.    ClientTop       =   1485
  9.    ClientWidth     =   6390
  10.    Height          =   7290
  11.    Left            =   1020
  12.    LinkMode        =   1  'Source
  13.    LinkTopic       =   "Form1"
  14.    MaxButton       =   0   'False
  15.    ScaleHeight     =   6885
  16.    ScaleWidth      =   6390
  17.    Top             =   1140
  18.    Width           =   6510
  19.    Begin PictureBox Picture2 
  20.       BackColor       =   &H00C0C0C0&
  21.       BorderStyle     =   0  'None
  22.       Height          =   615
  23.       Left            =   120
  24.       ScaleHeight     =   615
  25.       ScaleWidth      =   6135
  26.       TabIndex        =   1
  27.       Top             =   6120
  28.       Width           =   6135
  29.       Begin CommandButton ExitButton 
  30.          Caption         =   "Exit"
  31.          Height          =   375
  32.          Left            =   4200
  33.          TabIndex        =   2
  34.          Top             =   120
  35.          Width           =   1815
  36.       End
  37.       Begin CommandButton StopButton 
  38.          Caption         =   "Stop"
  39.          Height          =   375
  40.          Left            =   2160
  41.          TabIndex        =   3
  42.          Top             =   120
  43.          Width           =   1815
  44.       End
  45.       Begin CommandButton RunButton 
  46.          Caption         =   "Run"
  47.          Height          =   375
  48.          Left            =   120
  49.          TabIndex        =   4
  50.          Top             =   120
  51.          Width           =   1815
  52.       End
  53.    End
  54.    Begin PictureBox Picture1 
  55.       BackColor       =   &H00C0C0C0&
  56.       BorderStyle     =   0  'None
  57.       Height          =   5055
  58.       Left            =   5400
  59.       ScaleHeight     =   5055
  60.       ScaleWidth      =   855
  61.       TabIndex        =   5
  62.       Top             =   840
  63.       Width           =   855
  64.       Begin VScrollBar VScroll2 
  65.          Height          =   4815
  66.          LargeChange     =   5
  67.          Left            =   480
  68.          Max             =   40
  69.          Min             =   70
  70.          TabIndex        =   7
  71.          Top             =   120
  72.          Value           =   40
  73.          Width           =   255
  74.       End
  75.       Begin VScrollBar VScroll1 
  76.          Height          =   4815
  77.          LargeChange     =   10
  78.          Left            =   120
  79.          Max             =   360
  80.          TabIndex        =   6
  81.          Top             =   120
  82.          Width           =   255
  83.       End
  84.    End
  85.    Begin PictureBox GeoPic 
  86.       AutoRedraw      =   -1  'True
  87.       BackColor       =   &H00C0C0C0&
  88.       BorderStyle     =   0  'None
  89.       Height          =   5055
  90.       Left            =   120
  91.       ScaleHeight     =   100.597
  92.       ScaleMode       =   0  'User
  93.       ScaleWidth      =   100.597
  94.       TabIndex        =   0
  95.       Top             =   840
  96.       Width           =   5055
  97.    End
  98.    Begin PictureBox Picture3 
  99.       BackColor       =   &H00C0C0C0&
  100.       BorderStyle     =   0  'None
  101.       Height          =   495
  102.       Left            =   120
  103.       ScaleHeight     =   495
  104.       ScaleWidth      =   5055
  105.       TabIndex        =   8
  106.       Top             =   120
  107.       Width           =   5055
  108.       Begin OptionButton CubeOpt 
  109.          BackColor       =   &H00C0C0C0&
  110.          Caption         =   "Rotating Cube"
  111.          Height          =   255
  112.          Left            =   3000
  113.          TabIndex        =   10
  114.          Top             =   120
  115.          Width           =   1815
  116.       End
  117.       Begin OptionButton LinkOpt 
  118.          BackColor       =   &H00C0C0C0&
  119.          Caption         =   "Linkage"
  120.          Height          =   255
  121.          Left            =   240
  122.          TabIndex        =   9
  123.          Top             =   120
  124.          Value           =   -1  'True
  125.          Width           =   1215
  126.       End
  127.    End
  128. 'Geometry and animation from...
  129. 'Ivory Tower Software
  130. 'Richard Wagner, vice president, development
  131. 'CIS 76427,2611
  132. Dim sfAngle1 As Single              'Input lever angle, single floating
  133. Dim dfLinkLen As Double             'Length of the link from the input lever to the output lever
  134. Dim dfLever2Len As Double           'Length of the output lever, double floating
  135. Dim dfLever2X As Double             'X coordinate of the output lever center of rotation
  136. Dim dfLever2Y As Double             'Y coordinate of the output lever center of rotation
  137. Dim dfAlpha As Double               'Spherical coordinate of axis of cube rotation (about Z from +X)
  138. Dim dfBeta As Double                'Spherical coordinate of axis of cube rotation (from X-Y plane)
  139. Dim dfCubeVertX0(8) As Double       'Array of cube vertices' X coordinates (start)
  140. Dim dfCubeVertY0(8) As Double       'Array of cube vertices' Y coordinates (start)
  141. Dim dfCubeVertZ0(8) As Double       'Array of cube vertices' Z coordinates (start)
  142. Dim dfCubeVertX1(8) As Double       'Array of cube vertices' X coordinates (end)
  143. Dim dfCubeVertY1(8) As Double       'Array of cube vertices' Y coordinates (end)
  144. Dim dfCubeVertZ1(8) As Double       'Array of cube vertices' Z coordinates (end)
  145. Sub BorderBoxRaised (Source1 As Control, Source2 As Form)
  146.   'This sub simulates a raised surface on the form by drawing lines.
  147.   Source2.drawwidth = 1
  148.   Bleft% = Source1.Left - 20
  149.   BTop% = Source1.top - 20
  150.   BWide% = Source1.width + 15
  151.   BHigh% = Source1.height + 15
  152.   Source2.Line (Bleft%, BTop%)-Step(BWide%, 0), &HFFFFFF
  153.   Source2.Line -Step(0, BHigh%), 0
  154.   Source2.Line -Step(-BWide%, 0), 0
  155.   Source2.Line -Step(0, -BHigh%), &HFFFFFF
  156. End Sub
  157. Sub CubeOpt_Click ()
  158.   For i% = 1 To 8
  159.     dfCubeVertX1(i%) = dfCubeVertX0(i%)
  160.     dfCubeVertY1(i%) = dfCubeVertY0(i%)
  161.     dfCubeVertZ1(i%) = dfCubeVertZ0(i%)
  162.   Next i%
  163.     GeoPic.scalewidth = 200
  164.     GeoPic.scaleheight = -200
  165.     GeoPic.scaletop = 100
  166.     GeoPic.scaleleft = -100
  167.     VScroll1.Max = -180
  168.     VScroll1.Min = 180
  169.     VScroll1.value = 0
  170.     VScroll1.smallchange = 1
  171.     VScroll1.largechange = 10
  172.     VScroll2.Max = 180
  173.     VScroll2.Min = 0
  174.     VScroll2.value = 90
  175.     VScroll2.smallchange = 1
  176.     VScroll2.largechange = 10
  177.     GeoPic.Cls
  178.     NewCube
  179.     DrawAxis
  180. End Sub
  181. Sub DrawAxis ()
  182.   p1# = Cos(dfAlpha) * Sin(dfBeta) * 90             'Point p defines the axis of rotation
  183.   p2# = Sin(dfAlpha) * Sin(dfBeta) * 90             'which in this application passes through
  184.   p3# = Cos(dfBeta) * 90                            'the origin
  185.   GeoPic.drawwidth = 1
  186.   GeoPic.drawstyle = 3
  187.   GeoPic.Line (p1#, p2#)-(-p1#, -p2#), QBColor(7)   'Erase the existing line
  188.   dfAlpha = VScroll1.value * dfPi / 180
  189.   dfBeta = VScroll2.value * dfPi / 180
  190.   p1# = Cos(dfAlpha) * Sin(dfBeta) * 90
  191.   p2# = Sin(dfAlpha) * Sin(dfBeta) * 90
  192.   p3# = Cos(dfBeta) * 90
  193.   GeoPic.Line (p1#, p2#)-(-p1#, -p2#), QBColor(0)   'Draw the new line
  194.   GeoPic.drawstyle = 0
  195. End Sub
  196. Sub DrawCube (iErase As Integer)
  197.   'The cube to draw exists in 3-space. This drawing is a simple flat projection
  198.   'onto the X-Y plane so it will show no perspective (no sense of "depth").
  199.   'See the demo application CSC.MAK for an example of true perspective rendering
  200.   'of 3d objects.
  201.   'Just to keep track of vertices, this routine tacks on a number for each corner.
  202.   GeoPic.drawwidth = 3
  203.   'To erase, draw over previous with background color, using "Cls" makes a jumpy picture.
  204.   If iErase Then
  205.     GeoPic.forecolor = QBColor(7)           'Erase the cube
  206.     GeoPic.Line (dfCubeVertX1(1), dfCubeVertY1(1))-(dfCubeVertX1(2), dfCubeVertY1(2))
  207.     GeoPic.Print 2
  208.     GeoPic.Line (dfCubeVertX1(2), dfCubeVertY1(2))-(dfCubeVertX1(3), dfCubeVertY1(3))
  209.     GeoPic.Print 3
  210.     GeoPic.Line (dfCubeVertX1(3), dfCubeVertY1(3))-(dfCubeVertX1(4), dfCubeVertY1(4))
  211.     GeoPic.Print 4
  212.     GeoPic.Line (dfCubeVertX1(4), dfCubeVertY1(4))-(dfCubeVertX1(1), dfCubeVertY1(1))
  213.     GeoPic.Print 1
  214.     GeoPic.Line (dfCubeVertX1(1), dfCubeVertY1(1))-(dfCubeVertX1(5), dfCubeVertY1(5))
  215.     GeoPic.Print 5
  216.     GeoPic.Line (dfCubeVertX1(2), dfCubeVertY1(2))-(dfCubeVertX1(6), dfCubeVertY1(6))
  217.     GeoPic.Print 6
  218.     GeoPic.Line (dfCubeVertX1(3), dfCubeVertY1(3))-(dfCubeVertX1(7), dfCubeVertY1(7))
  219.     GeoPic.Print 7
  220.     GeoPic.Line (dfCubeVertX1(4), dfCubeVertY1(4))-(dfCubeVertX1(8), dfCubeVertY1(8))
  221.     GeoPic.Print 8
  222.     GeoPic.Line (dfCubeVertX1(5), dfCubeVertY1(5))-(dfCubeVertX1(6), dfCubeVertY1(6))
  223.     GeoPic.Line (dfCubeVertX1(6), dfCubeVertY1(6))-(dfCubeVertX1(7), dfCubeVertY1(7))
  224.     GeoPic.Line (dfCubeVertX1(7), dfCubeVertY1(7))-(dfCubeVertX1(8), dfCubeVertY1(8))
  225.     GeoPic.Line (dfCubeVertX1(8), dfCubeVertY1(8))-(dfCubeVertX1(5), dfCubeVertY1(5))
  226.   Else
  227.     GeoPic.forecolor = QBColor(0)           'Redraw the cube
  228.     GeoPic.Line (dfCubeVertX1(1), dfCubeVertY1(1))-(dfCubeVertX1(2), dfCubeVertY1(2)), QBColor(4)
  229.     GeoPic.Print 2
  230.     GeoPic.Line (dfCubeVertX1(2), dfCubeVertY1(2))-(dfCubeVertX1(3), dfCubeVertY1(3)), QBColor(4)
  231.     GeoPic.Print 3
  232.     GeoPic.Line (dfCubeVertX1(3), dfCubeVertY1(3))-(dfCubeVertX1(4), dfCubeVertY1(4)), QBColor(4)
  233.     GeoPic.Print 4
  234.     GeoPic.Line (dfCubeVertX1(4), dfCubeVertY1(4))-(dfCubeVertX1(1), dfCubeVertY1(1)), QBColor(4)
  235.     GeoPic.Print 1
  236.     GeoPic.Line (dfCubeVertX1(1), dfCubeVertY1(1))-(dfCubeVertX1(5), dfCubeVertY1(5)), QBColor(4)
  237.     GeoPic.Print 5
  238.     GeoPic.Line (dfCubeVertX1(2), dfCubeVertY1(2))-(dfCubeVertX1(6), dfCubeVertY1(6)), QBColor(4)
  239.     GeoPic.Print 6
  240.     GeoPic.Line (dfCubeVertX1(3), dfCubeVertY1(3))-(dfCubeVertX1(7), dfCubeVertY1(7)), QBColor(4)
  241.     GeoPic.Print 7
  242.     GeoPic.Line (dfCubeVertX1(4), dfCubeVertY1(4))-(dfCubeVertX1(8), dfCubeVertY1(8)), QBColor(4)
  243.     GeoPic.Print 8
  244.     GeoPic.Line (dfCubeVertX1(5), dfCubeVertY1(5))-(dfCubeVertX1(6), dfCubeVertY1(6)), QBColor(4)
  245.     GeoPic.Line (dfCubeVertX1(6), dfCubeVertY1(6))-(dfCubeVertX1(7), dfCubeVertY1(7)), QBColor(4)
  246.     GeoPic.Line (dfCubeVertX1(7), dfCubeVertY1(7))-(dfCubeVertX1(8), dfCubeVertY1(8)), QBColor(4)
  247.     GeoPic.Line (dfCubeVertX1(8), dfCubeVertY1(8))-(dfCubeVertX1(5), dfCubeVertY1(5)), QBColor(4)
  248.   End If
  249.   GeoPic.forecolor = QBColor(0)
  250. End Sub
  251. Sub DrawMech ()
  252.   GeoPic.forecolor = QBColor(0)
  253.   GeoPic.drawwidth = 3
  254.   LeverEndX# = 30 - Cos(sfAngle1) * 10      'Radius is 10 in a scalewidth of 100
  255.   LeverEndY# = 40 + Sin(sfAngle1) * 10      'Double precision is used because CircInterSect needs it
  256.   CircInter LeverEndX#, LeverEndY#, dfLever2X, dfLever2Y, dfLinkLen, dfLever2Len, x1#, x2#, Y1#, y2#
  257.   GeoPic.Line (30, 40)-(LeverEndX#, LeverEndY#), QBColor(7)   'Erases previous line
  258.   GeoPic.Line (LeverEndX#, LeverEndY#)-(x2#, y2#), QBColor(7)
  259.   GeoPic.Line (x2#, y2#)-(dfLever2X, dfLever2Y), QBColor(7)
  260.   sfAngle1 = VScroll1.value * dfPi / 180    'Convert input angle to radians
  261.   LeverEndX# = 30 - Cos(sfAngle1) * 10
  262.   LeverEndY# = 40 + Sin(sfAngle1) * 10
  263.   'Call the GEO dll subroutine to find the intersection of the two circles:
  264.   CircInter LeverEndX#, LeverEndY#, dfLever2X, dfLever2Y, dfLinkLen, dfLever2Len, x1#, x2#, Y1#, y2#
  265.   GeoPic.Line (30, 40)-(LeverEndX#, LeverEndY#)
  266.   GeoPic.Line (LeverEndX#, LeverEndY#)-(x2#, y2#), QBColor(4)
  267.   GeoPic.Line (x2#, y2#)-(dfLever2X, dfLever2Y)
  268. End Sub
  269. Sub ExitButton_Click ()
  270.   End
  271. End Sub
  272. Sub Form_Load ()
  273.   dfLinkLen = 30
  274.   dfLever2Len = 40
  275.   dfLever2X = 70
  276.   dfLever2Y = 80
  277.   dfCubeVertX0(1) = 20  'double floating cube vertex X starting
  278.   dfCubeVertY0(1) = 0
  279.   dfCubeVertZ0(1) = 0
  280.   dfCubeVertX0(2) = 60
  281.   dfCubeVertY0(2) = 0
  282.   dfCubeVertZ0(2) = 0
  283.   dfCubeVertX0(3) = 60
  284.   dfCubeVertY0(3) = 40
  285.   dfCubeVertZ0(3) = 0
  286.   dfCubeVertX0(4) = 20
  287.   dfCubeVertY0(4) = 40
  288.   dfCubeVertZ0(4) = 0
  289.   dfCubeVertX0(5) = 20
  290.   dfCubeVertY0(5) = 0
  291.   dfCubeVertZ0(5) = 40
  292.   dfCubeVertX0(6) = 60
  293.   dfCubeVertY0(6) = 0
  294.   dfCubeVertZ0(6) = 40
  295.   dfCubeVertX0(7) = 60
  296.   dfCubeVertY0(7) = 40
  297.   dfCubeVertZ0(7) = 40
  298.   dfCubeVertX0(8) = 20
  299.   dfCubeVertY0(8) = 40
  300.   dfCubeVertZ0(8) = 40
  301.   GeoPic.scalewidth = 100
  302.   GeoPic.scaleheight = 100
  303.   GeoPic.scaletop = 0
  304.   GeoPic.scaleleft = 0
  305.   DrawMech
  306. End Sub
  307. Sub Form_Paint ()
  308.   BorderBoxRaised GeoPic, Geo
  309.   BorderBoxRaised Picture1, Geo
  310.   BorderBoxRaised Picture2, Geo
  311.   BorderBoxRaised Picture3, Geo
  312. End Sub
  313. Sub LinkOpt_Click ()
  314.     GeoPic.scalewidth = 100
  315.     GeoPic.scaleheight = 100
  316.     GeoPic.scaletop = 0
  317.     GeoPic.scaleleft = 0
  318.     VScroll1.Max = 360
  319.     VScroll1.Min = 0
  320.     VScroll1.value = 0
  321.     VScroll1.smallchange = 1
  322.     VScroll1.largechange = 10
  323.     VScroll2.Max = 40
  324.     VScroll2.Min = 70
  325.     VScroll2.value = 40
  326.     VScroll2.smallchange = 1
  327.     VScroll2.largechange = 5
  328.     DrawMech
  329. End Sub
  330. Sub NewCube ()
  331.   GeoPic.drawwidth = 3
  332.   GeoPic.forecolor = QBColor(4)            'Draw a virgin cube
  333.   GeoPic.Line (dfCubeVertX0(1), dfCubeVertY0(1))-(dfCubeVertX0(2), dfCubeVertY0(2))
  334.   GeoPic.Line (dfCubeVertX0(2), dfCubeVertY0(2))-(dfCubeVertX0(3), dfCubeVertY0(3))
  335.   GeoPic.Line (dfCubeVertX0(3), dfCubeVertY0(3))-(dfCubeVertX0(4), dfCubeVertY0(4))
  336.   GeoPic.Line (dfCubeVertX0(4), dfCubeVertY0(4))-(dfCubeVertX0(1), dfCubeVertY0(1))
  337.   GeoPic.Line (dfCubeVertX0(1), dfCubeVertY0(1))-(dfCubeVertX0(5), dfCubeVertY0(5))
  338.   GeoPic.Line (dfCubeVertX0(2), dfCubeVertY0(2))-(dfCubeVertX0(6), dfCubeVertY0(6))
  339.   GeoPic.Line (dfCubeVertX0(3), dfCubeVertY0(3))-(dfCubeVertX0(7), dfCubeVertY0(7))
  340.   GeoPic.Line (dfCubeVertX0(4), dfCubeVertY0(4))-(dfCubeVertX0(8), dfCubeVertY0(8))
  341.   GeoPic.Line (dfCubeVertX0(5), dfCubeVertY0(5))-(dfCubeVertX0(6), dfCubeVertY0(6))
  342.   GeoPic.Line (dfCubeVertX0(6), dfCubeVertY0(6))-(dfCubeVertX0(7), dfCubeVertY0(7))
  343.   GeoPic.Line (dfCubeVertX0(7), dfCubeVertY0(7))-(dfCubeVertX0(8), dfCubeVertY0(8))
  344.   GeoPic.Line (dfCubeVertX0(8), dfCubeVertY0(8))-(dfCubeVertX0(5), dfCubeVertY0(5))
  345. End Sub
  346. Sub RotateCube (ByVal o1 As Double, ByVal o2 As Double, ByVal o3 As Double, ByVal p1 As Double, ByVal p2 As Double, ByVal p3 As Double, ByVal Theta As Double)
  347.   'For each vertex, call SolidRotate to find its new point in 3-space for the angle it rotates through:
  348.   For i% = 1 To 8
  349.     r1# = dfCubeVertX0(i%)  'These are "home" coordinates which never change
  350.     r2# = dfCubeVertY0(i%)
  351.     r3# = dfCubeVertZ0(i%)
  352.     SolidRotate o1, o2, o3, p1, p2, p3, r1#, r2#, r3#, Theta
  353.     dfCubeVertX1(i%) = r1#  'These are the new coordinates to draw the rotated cube
  354.     dfCubeVertY1(i%) = r2#
  355.     dfCubeVertZ1(i%) = r3#
  356.   Next i%
  357. End Sub
  358. Sub RunButton_Click ()
  359.   Static iAngle%
  360.   RunButton.enabled = 0
  361.   StopButton.enabled = -1
  362.   LinkOpt.enabled = 0
  363.   CubeOpt.enabled = 0
  364.   If LinkOpt.value Then
  365.     Do While StopButton.enabled
  366.       np% = DoEvents()
  367.       VScroll1.value = iAngle%
  368.       iAngle% = iAngle% + 2                 '2 degree increments
  369.       If iAngle% > 360 Then iAngle% = 0
  370.     Loop
  371.   Else
  372.     RunCubeRotation
  373.   End If
  374. End Sub
  375. Sub RunCubeRotation ()
  376.   WipeNewCube
  377.   o1# = 0                                     'A rotation axis point
  378.   o2# = 0
  379.   o3# = 0
  380.   Do While StopButton.enabled
  381.     i% = i% + 1
  382.     If i% > 360 / 5 Then i% = 0
  383.     Theta# = i% * 5 * dfPi / 180              '5 degree increments
  384.     If Theta# > dfPi Then
  385.       Theta# = Theta# - dfPi * 2              'Theta must be between -pi and pi
  386.     End If
  387.     DrawCube -1                               'Erase previous cube drawing
  388.     DrawAxis                                  'Put the axis back if needed
  389.     p1# = Cos(dfAlpha) * Sin(dfBeta) * 90     'The other rotation axis point
  390.     p2# = Sin(dfAlpha) * Sin(dfBeta) * 90     '90 makes a nice long line
  391.     p3# = Cos(dfBeta) * 90
  392.     RotateCube o1#, o2#, o3#, p1#, p2#, p3#, Theta#
  393.     DrawCube 0                                'Draw the new cube
  394.     DrawAxis
  395.     np% = DoEvents()                          'Be friendly
  396.   Loop
  397. End Sub
  398. Sub StopButton_Click ()
  399.   StopButton.enabled = 0
  400.   RunButton.enabled = -1
  401.   LinkOpt.enabled = -1
  402.   CubeOpt.enabled = -1
  403.   VScroll1.visible = -1
  404.   VScroll2.visible = -1
  405.   If CubeOpt.value Then
  406.     DrawCube -1
  407.     NewCube
  408.   End If
  409. End Sub
  410. Sub VScroll1_Change ()
  411.   If LinkOpt.value Then
  412.     DrawMech
  413.   Else
  414.     DrawAxis
  415.   End If
  416. End Sub
  417. Sub VScroll1_GotFocus ()
  418.   ExitButton.SetFocus
  419. End Sub
  420. Sub VScroll2_Change ()
  421.   If LinkOpt.value Then
  422.     dfLever2Len = VScroll2.value
  423.     GeoPic.Cls
  424.     DrawMech
  425.   Else
  426.     DrawAxis
  427.   End If
  428. End Sub
  429. Sub VScroll2_GotFocus ()
  430.   ExitButton.SetFocus
  431. End Sub
  432. Sub WipeNewCube ()
  433.   GeoPic.drawwidth = 3
  434.   GeoPic.forecolor = QBColor(7)            'Erase a virgin cube
  435.   GeoPic.Line (dfCubeVertX0(1), dfCubeVertY0(1))-(dfCubeVertX0(2), dfCubeVertY0(2))
  436.   GeoPic.Line (dfCubeVertX0(2), dfCubeVertY0(2))-(dfCubeVertX0(3), dfCubeVertY0(3))
  437.   GeoPic.Line (dfCubeVertX0(3), dfCubeVertY0(3))-(dfCubeVertX0(4), dfCubeVertY0(4))
  438.   GeoPic.Line (dfCubeVertX0(4), dfCubeVertY0(4))-(dfCubeVertX0(1), dfCubeVertY0(1))
  439.   GeoPic.Line (dfCubeVertX0(1), dfCubeVertY0(1))-(dfCubeVertX0(5), dfCubeVertY0(5))
  440.   GeoPic.Line (dfCubeVertX0(2), dfCubeVertY0(2))-(dfCubeVertX0(6), dfCubeVertY0(6))
  441.   GeoPic.Line (dfCubeVertX0(3), dfCubeVertY0(3))-(dfCubeVertX0(7), dfCubeVertY0(7))
  442.   GeoPic.Line (dfCubeVertX0(4), dfCubeVertY0(4))-(dfCubeVertX0(8), dfCubeVertY0(8))
  443.   GeoPic.Line (dfCubeVertX0(5), dfCubeVertY0(5))-(dfCubeVertX0(6), dfCubeVertY0(6))
  444.   GeoPic.Line (dfCubeVertX0(6), dfCubeVertY0(6))-(dfCubeVertX0(7), dfCubeVertY0(7))
  445.   GeoPic.Line (dfCubeVertX0(7), dfCubeVertY0(7))-(dfCubeVertX0(8), dfCubeVertY0(8))
  446.   GeoPic.Line (dfCubeVertX0(8), dfCubeVertY0(8))-(dfCubeVertX0(5), dfCubeVertY0(5))
  447. End Sub
  448.